"""
@author: yinjx
@file: lianxi-16homework.py
@time: 2023/4/20 11:09
"""
#1、python中list和tuple的区别，list和set的区别
  #list是可变数据类型  tuple是不可变数据类型  所以对于定义好的tuple，里面的元素不能随便更该。而对于list，是一种可变数据类型，里面的元素可以进行增删改查
#2、python解释器有哪些？python的优缺点
   #cpython   pypy  cython  stackless python  jthon..
   #优缺点：优点：
    # Python 简单易用，学习成本低，看起来非常优雅干净；
    # Python 标准库和第三库众多，功能强大，既可以开发小工具，也可以开发企业级应用；
    # Python 站在了人工智能和大数据的风口上，站在风口上，猪都能飞起来。
    #缺点：运行速度慢
#        代码加密严重
#3、go语言你已经使用过哪些库？go语言的基本数据类型有哪些？ 哪些是值类型？哪些是引用类型？
    #布尔型，值只可以是常量true或false；2、数字类型，支持整型和浮点型数字，并且支持复数；
    # 3、字符串类型，是一串固定长度的字符连接起来的字符序列；4、指针类型；5、数组类型；
    # 6、结构化类型；7、Channel类型；8、函数类型；9、切片类型；10、接口类型；11、Map类型。
    # 值类型：int、float、bool、string、数组array、结构体struct
    # 引用类型：指针、切片slice、map、接口interface、函数func、管道chan

#4、从键盘接受两个日期时间，计算他们相差天数？ -- python
# from datetime import *
# # 输入2个日期
# # date1 = "2022.05.11 13:30:00"
# # date2 = "2022.05.10 12:00:00"
# print("请以xxx.xxx.xxx的格式输入第一个时间")
# date1 = input("")
# print("请以xxx.xxx.xxx的格式输入第二个时间")
# date2 = input("")
# # 将输入的日期转换为“datetime.datetime”类型
# # 由于日期的类型是字符串，因此不能直接进行计算，会报错
# date1 = datetime.strptime(date1, "%Y.%m.%d")#
# date2 = datetime.strptime(date2, "%Y.%m.%d")
# print(" date1:", date1, "\n" ,"date2:", date2)
# # 计算时间差：时间差的类型为“datetime.timedelta”类型
# duration = date1 - date2
# day = duration.days
# print("days:", day)




#5、从键盘接受一串整数数值的输入（使用空格分隔），计算他们的最大值，平均值、和  -- go
# print("请输入一串数字以空格分隔")
# list1 = list(map(int, input().split()))
# print(type(list1))
# print(list1)
# num = list1[0]
# print(type(list1[0]))
# l_len = len(list1)
# sum = 0
# for i in list1:
#     if i > num:
#         num = i
#     sum += i
# print(f"最大值为{num},和为{sum},平均值为{sum/l_len}")

#6、go语言怎么进行错误处理，python的异常处理使用什么
#python:异常捕获机制
    #try..except....
    #异常发生不终止程序
    #异常发生做特殊处理
    #else结构 finally 结构
    #else 结构 没有任何异常发生就执行
    #finally 不管有没有异常 都执
#go：
    #panic  可以再任何地方引发  但是recover只是在defer调用函数中才有效 defer先定义 后执行
    # 内置类型 error

#7、python字典存储的原理？ 字典的特点是什么？go语言map类型怎么判断key已经存在？
#go中字典的原理：
#字典的特点：字典是无序的数据类型
#          字典的可以存储任意数据类型（例如：字典，列表，元组，数字，字符串，集合，布尔值）
#          字典的元素可以更改，但是如果包含的数据类型是元组，则元组里面的数据是不能进行更改，只能整体替换
#判断key是否存在：	//value,ok := countrymap("japan")
	# if ok {
	# 	fmt.Println("japan对应的值为",value)
	# 	fmt.Println("取不到值")
	# }else{
	# 	fmt.Println("取不到值")
	# }

#8、go语言切片底层原理，扩容方式是什么？
#切片的本质是引用底层数组头指针+当前切片长度+底层数组大小：即array、len和cap
#切片能够在底层数组容量不够时进行扩容，每次append时如果容量不足，会创建2倍大小于老数组的新数组，并复制老数组数据至新的数组中

#9、python中*args， **kwargs是什么意思？go语言中怎么接受可变长的参数
# *args
# 在当传入的参数个数未知，且不需要知道参数名称时使用。
# **kwargs
# 当传入的参数个数未知，但需要知道参数的名称时使用
#go语言中怎么接受可变长的参数：

#10、从键盘接受一串字符串，统计里面字母、数字、其他字符的个数  -- python
# data=input()
# a=0;b=0;c=0
# for i in data:
#     if i.isdigit():
#         a=a+1
#     elif i>='a' and i<='z':
#         b=b+1
#     elif i>='A' and i<='Z':
#         b=b+1
#     else:
#         c=c+1
# print("数字个数:",a)
# print("字母个数:",b)
# print("其他字符个数:",c)

#11、统计两个slice中相同元素的个数  -- go

#12、计算1000以内的水仙花数 -- 就是个位、十位、百位的立方和等于数值本身，例：153=1**3 + 5**3 + 3**3  -- go
# for i in range(100,1000):
#     a = i//100
#     b = (i-a*100)//10 #//表示返回的是一个整数  /表示返回的是浮点型
#     c = (i-a*100-b*10)
#     if i == pow(a,3)+pow(b,3)+pow(c,3):#a b c 的三次幂之和
#         print(i)



#13、读取scwebsite2_ssl.log文件，统计总共有多少个ip访问过  -- python

#14、有两个map，合并他们的相同key对应的value值。  -- go
     #例：A： { "AA"：1, "BB":2}    B:{"AA":2, "BB":3, "CC":4}    得到结果C: {"AA":3, "BB":6, "CC":4}
     #使用字典进行更新
# d3 = {}
# d1 = {"AA":1, "BB":2 ,"DD":6}
# d2 = {"AA":2, "BB":3, "CC":4}
# for i in d1:
#     if i in d2:
#         d3[i] = int(d1[i]) + int(d2[i])
#     else:
#         d3[i] = d1[i]
# for i in d2:
#     if i not in d3:
#         d3[i] = d2[i]
# print(d3)


#15、python的函数参数传递，是属于值类型还是引用类型？go的函数参数传递，是属于值类型还是引用类型？
#         python:属于值类型   go :属于值类型
#16、统计list中整数类型的数值和（list中可能有其他类型，只需要整数类型）。  -- python
# list = [1,2,4,56,7,'s','f','d']
# sum = 0
# for i in list:
#     if type(i) == int:
#        sum+=i
# print(sum)